#include <iostream>
#include <future>
#include <thread>
#include <chrono>

int add(int num1, int num2)
{
    std::cout << "加法" << std::endl;
    return num1 + num2;
}
int main()
{
    // async：将一个任务与future关联，通过future对象可以取到任务执行结果
    // std::launch::deferred：不会创建一个新线程执行任务，在调用 wait 或者 get 时才会执行任务
    // future 模板类型和任务结果的类型是一致的
    // std::future<int> ret = std::async(std::launch::deferred, add, 10, 20);

    // std::launch::async：创建一个线程，异步执行任务
    std::future<int> ret = std::async(std::launch::async, add, 10, 20);
    

    std::cout << "等待，稍后取出加法任务执行结果" << std::endl;
    std::this_thread::sleep_for(std::chrono::seconds(3));

    std::cout << "---------------" << std::endl;
    std::cout << ret.get() << std::endl;
    return 0;
}